package priv.conceit.study.leetcode.simple.official;

import java.util.LinkedList;
import java.util.Queue;

/**
 * 编号225
 * 用队列实现栈
 * <a href="https://leetcode-cn.com/problems/implement-stack-using-queues/">
 * 使用队列实现栈的下列操作。
 * push(x) -- 元素 x 入栈。
 * pop() -- 移除栈顶元素
 * top() -- 获取栈顶元素。
 * empty() -- 返回栈是否为空。
 *
 * 你只能使用队列的基本操作-- 也就是 push to back, peek/pop from front, size, 和 is empty 这些操作是合法的
 * 你所使用的语言也许不支持队列。 你可以使用 list 或者 deque（双端队列）来模拟一个队列 , 只要是标准的队列操作即可
 * 你可以假设所有操作都是有效的（例如, 对一个空的栈不会调用 pop 或者 top 操作）
 *
 *
 * 思路1
 * 题解只规定使用队-_-!
 * 翻转队列
 *
 * 思路2
 * 两个队列
 *
 * 思路3
 * 每次队列新增元素就放到最后
 *
 *
 * @author Conceit
 * @since 1.0.0, 2019/8/15
 */
public class ImplementStackUsingQueues {
	public ImplementStackUsingQueues() {

	}

	public static void main(String[] args) {


	}

	Queue<Integer> queue=new LinkedList<>();
//	Queue<Integer> assistant=new LinkedList<>();
//	LinkedList<Integer> linkedList=new LinkedList<>();


	/**
	 *
	 * 新增元素将元素放置队列的最后
	 * {@link Queue#offer(Object)} 新增至队尾 无容量限制 不抛出异常
	 * {@link Queue#add(Object)} 新增至队尾 有容量限制 抛出异常
	 * {@link Queue#poll()} 删除队头 空集合时不抛出异常 只是返回 null 建议使用
	 * {@link Queue#remove()} 删除队头 与Collection 接口的版本相似
	 * {@link Queue#peek()} 获取队头 队列为空时返回 null。
	 * {@link Queue#element()} 获取队头 队列为空时抛异常
	 *
	 * @param x
	 */
	public void push(int x) {
		queue.offer(x);
		//循环次数为size-1次 新增的元素不需要移动，
		for (int i=1;i<queue.size();i++){
			queue.offer(queue.poll());
		}

	}


	public int pop() {
		return queue.poll();
	}


	public int top() {
		return queue.peek();
	}


	public boolean empty() {
		return queue.isEmpty();
	}



}
